/*NeatUpload - an HttpModule and User Controls for uploading large files
Copyright (C) 2005  Dean Brettle

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

function NeatUploadGetMainWindow()
{ var mainWindow; if (window.opener)
mainWindow = window.opener; else
mainWindow = window.parent; return mainWindow; }; 
NeatUploadCancelled = false; 
function NeatUploadCancel()
{ NeatUploadCancelled = true; var mainWindow = NeatUploadGetMainWindow(); if (mainWindow && mainWindow.stop)
mainWindow.stop(); else if (mainWindow && mainWindow.document && mainWindow.document.execCommand)
mainWindow.document.execCommand('Stop'); }

function NeatUpload_CombineHandlers(origHandler, newHandler)
{ if (!origHandler || typeof(origHandler) == 'undefined') return newHandler; return function(e) { origHandler(e); newHandler(e); }; }

NeatUploadReq = null; function NeatUploadRefreshWithAjax(url)
{ NeatUploadReq = null; var req = null; try
{ req = new ActiveXObject('Microsoft.XMLHTTP'); }
catch (ex)
{ req = null; }
if (!req && typeof(XMLHttpRequest) != 'undefined')
{ req = new XMLHttpRequest(); }
if (req)
{ NeatUploadReq = req; }
if (NeatUploadReq)
{ NeatUploadReq.onreadystatechange = NeatUploadUpdateHtml; NeatUploadReq.open('GET', url); NeatUploadReq.send(null); }
else
{ return false; }
return true; }

function NeatUploadUpdateHtml()
{ if (typeof(NeatUploadReq) != 'undefined' && NeatUploadReq != null && NeatUploadReq.readyState == 4)
{ try
{ var responseXmlDoc = NeatUploadReq.responseXML; if (responseXmlDoc.parseError && responseXmlDoc.parseError.errorCode != 0)
{ }
var templates = responseXmlDoc.getElementsByTagName('neatUploadDetails'); var status = templates.item(0).getAttribute('status'); for (var t = 0; t < templates.length; t++)
{ var srcElem = templates.item(t); var innerXml = ''; for (var i = 0; i < srcElem.childNodes.length; i++)
{ var childNode = srcElem.childNodes.item(i); var xml = childNode.xml; if (xml == null)
xml = new XMLSerializer().serializeToString(childNode); if (typeof(xml) == 'undefined')
throw "serializeToString() returned 'undefined' (probably due to a Safari bug) so no AJAX."; innerXml += xml; }
var id = srcElem.getAttribute('id'); var destElem = document.getElementById(id); destElem.innerHTML = innerXml; for (var a=0; a < srcElem.attributes.length; a++)
{ var attr = srcElem.attributes.item(a); if (attr.specified)
{ if (attr.name == 'style' && destElem.style && destElem.style.cssText)
destElem.style.cssText = attr.value; else
destElem.setAttribute(attr.name, attr.value); }
}
}
if (status != 'NormalInProgress' && status != 'ChunkedInProgress' && status != 'Unknown')
{ NeatUploadRefreshPage(); }
var lastMillis = NeatUploadLastUpdate.getTime(); NeatUploadLastUpdate = new Date(); var delay = Math.max(lastMillis + 1000 - NeatUploadLastUpdate.getTime(), 1); NeatUploadReloadTimeoutId = setTimeout('NeatUploadRefresh()', delay); }
catch (ex)
{ NeatUploadRefreshPage(); }
}
}

NeatUploadLastUpdate = new Date(); NeatUploadReloadTimeoutId = null; 
window.onunload = NeatUpload_CombineHandlers(window.onunload, function ()
{ if (NeatUploadReq && NeatUploadReq.readystate
&& NeatUploadReq.readystate >= 1 && NeatUploadReq.readystate <=3)
{ NeatUploadReq.abort(); }
NeatUploadReq = null; if (NeatUploadReloadTimeoutId)
clearTimeout(NeatUploadReloadTimeoutId); }); 
NeatUploadMainWindow = NeatUploadGetMainWindow(); 
function NeatUploadRefresh()
{ if (!NeatUploadRefreshWithAjax(NeatUploadRefreshUrl + '&useXml=true'))
{ NeatUploadRefreshPage(); }
}

function NeatUploadRefreshPage()
{ if (!NeatUploadCancelled)
{ window.location.replace(NeatUploadRefreshUrl); }
}

function NeatUpload_CancelClicked()
{ NeatUploadCancel(); window.location.replace(NeatUploadRefreshUrl + '&cancelled=true'); }
